package cn.regexp.marktag.provider;

import com.intellij.ide.projectView.ViewSettings;
import com.intellij.ide.util.treeView.AbstractTreeNode;

import java.util.Collection;


/**
 * @author Regexp
 */
public interface MyTreeStructureProvider {

    /**
     * 修改项目视图中指定节点的子节点列表
     * 触发时机：1.打开项目  2.第一次展开目录
     *
     * @param parent   父节点
     * @param children 根据默认项目结构得到的子节点列表
     * @param settings 当前项目视图设置
     * @return 修改后的子节点集合，如果不需要修改，则返回 children
     */
    Collection<AbstractTreeNode<?>> modify(AbstractTreeNode<?> parent,
                                           Collection<AbstractTreeNode<?>> children,
                                           ViewSettings settings);

    /**
     * 为项目视图中当前选择的节点返回指定类型的用户数据对象。
     *
     * @param selected 在项目视图中选择的节点列表
     * @param dataId   请求求的数据对象的标识符（例如，在com.intellij.openapi.actionSystem.PlatformDatakeys 中定义）。
     * @return 据对象，如果该提供者无法返回数据对象，则返回 nul1。
     */
    default Object getData(Collection<? extends AbstractTreeNode<?>> selected, String dataId) {
        return null;
    }
}
